#pragma once
#include "Channel.hpp"
#include "EventLoop.hpp"
#include <string>
using namespace std;
class EventLoop;
class Dispatcher
{
public:
    // 初始化epoll,select,poll函数对应的数据块
    Dispatcher(EventLoop *evloop)
        : m_evLoop(evloop)
    {
    }

    virtual ~Dispatcher()
    {} 
    // 实现多态需要将析构函数设置为虚函数
    // 将下面的函数设置为虚函数后，子类就能对父类函数进行重写操作
    // 添加
    virtual int add()
    {
        return 0;
    }
    // 删除
    virtual int remove()
    {
        return 0;
    }
    // 修改
    virtual int modify()
    {
        return 0;
    }
    // 事件检测
    virtual int dispatch(int timeout = 2);
    inline void setChannel(Channel *channel)
    {
        m_channel = channel;
    }

protected:
    string m_name = string();
    EventLoop *m_evLoop;
    Channel *m_channel;
};